#!/usr/bin/env python
# -*-coding: utf-8 -*-
# Filename: gerencia.py

from random import randrange
from sqlobject.sqlbuilder import LIKE, AND

##
# Módulos propios
from lib.database import GrupoDeResolucion, Usuario, Empleado

class Gerencia:
    def __init__(self, usuario):
        self.usuario = usuario
        self.grupo_de_resolucion = {}

    def crear_grupo_de_resolucion(self, fecha, descripcion, integrantes,
            nombre):
        """Crea un nuevo grupo"""
        import pdb
        pdb.set_trace()
        grupo = GrupoDeResolucion(fecha_creacion=fecha,
                descripcion = 'Te la encargo',
                nombre = nombre)
        self.grupo_de_resolucion[grupo.id] = grupo
        # Agregamos los integrantes
        for integrante in integrantes:
            usuario = Usuario(u_legajo='u'+str(integrante.legajo),
                    password=str(randrange(1, 1000000)),
                    descripcion_cargo='',
                    empleado=integrante.id,
                    grupo_de_resolucion=grupo.id)
            integrante.set(usuario=usuario.id)
        self.mandar_mail()

    def mandar_mail(self):
        """
        """
        pass

    def buscar_grupo_de_resolucion_todos(self):
        """Devuelve todos los grupo del sistema
        """
        return GrupoDeResolucion.select()

    def buscar_grupo_de_resolucion_integrante(self, tupla_widget_integrante):
        """Dependiendo de la tupla de integrantes busca los grupo que tengan
        como integrantes a éstos"""
        # Primero busquemos en el diccionario que tenemos en memoria 
        consulta_widget_integrante =(
                LIKE(Empleado.q.legajo, '%'+tupla_widget_integrante[0]+'%'),
                LIKE(Empleado.q.nombre, '%'+tupla_widget_integrante[1]+'%'),
                LIKE(Empleado.q.apellido, '%'+tupla_widget_integrante[2]+'%')
                )
        consulta_integrante = ''
        lista_grupos = []
        for pos, dato in enumerate(tupla_widget_integrante):
            if dato:
                consulta_integrante+= consulta_widget_integrante[pos]
        if consulta_integrante:
            resultado_integrante = Empleado.select(AND(consulta_integrante))
            # Como no tengo relacion directa entre empleado y grupo, para
            # obtener el grupo de resolucion recorro resultado_integrante y
            # devuelvo el grupo del usuario asociado
            for empleado in resultado_integrante:
                if empleado.usuario:
                    lista_grupos.append(empleado.usuario.grupo_de_resolucion)
        return lista_grupos
    
    def buscar_grupo_de_resolucion_grupo(self, tupla_widget_grupo):
        """Dependiendo de la tupla de grupo de resolucion armara la consulta"""
        # Primero busquemos en el diccionario que tenemos en memoria
        consulta_widget_grupo =(
                LIKE(GrupoDeResolucion.q.id,'%'+tupla_widget_grupo[0]+'%'),
                LIKE(GrupoDeResolucion.q.nombre,'%'+tupla_widget_grupo[1]+'%'),
                LIKE(GrupoDeResolucion.q.estado, tupla_widget_grupo[2])
                )
        consulta_grupo = ''
        lista_grupos = []
        for pos, dato in enumerate(tupla_widget_grupo):
            if dato:
                consulta_grupo+=consulta_widget_grupo[pos]
        if consulta_grupo:
            # El usuario puso al menos un criterio relacionado al grupo
            lista_grupos = GrupoDeResolucion.select(AND(consulta_grupo))
        return list(lista_grupos)

    def modificar_grupo_de_resolucion(self):
        pass

    def borrar_grupo_de_resolucion(self):
        pass

